package com.cloud.api.domain.algorithm;

import lombok.Builder;
import lombok.Data;

/**
 * @author 杨斌
 * 2025-01-2025-01-21
 * 定义一个矩形区域，包含西南角和东北角的经纬度坐标。
 * 主要作用是提供一种快速筛选机制，用于判断一个点是否在一个矩形区域内
 */
@Data
@Builder
public class LatLngBounds {

    /**
     * 西南的经纬度, 矩形区域的西南角
     */
    private VehiclePoint southwest;

    /**
     * 东北的经纬度,矩形区域的东北角
     */
    private VehiclePoint northeast;

    /**
     * 包含判断：通过比较纬度和经度，可以快速判断一个点是否在矩形区域内。具体来说：
     * 纬度范围：southwest.getLatitude() <= latitude <= northeast.getLatitude()
     * 经度范围：southwest.getLongitude() <= longitude <= northeast.getLongitude()
     * @param point
     * @return
     */

    public boolean contains(VehiclePoint point) {
        return this.checkLatitude(point.getLat()) && this.checkLongitude(point.getLng());
    }

    private boolean checkLatitude(double latitude) {
        return this.southwest.getLat() <= latitude && latitude <= this.northeast.getLat();
    }

    private boolean checkLongitude(double longitude) {
        return this.southwest.getLng() <= longitude && longitude <= this.northeast.getLng();
    }
}

